/*
 * ========================================
 * RISC-V 最小操作系统测试套件
 * ========================================
 * 
 * 这个文件包含了printf功能的综合测试用例。
 * 用于验证我们实现的printf、清屏、颜色输出等功能。
 * 
 * 测试覆盖：
 * 1. 基本格式化功能
 * 2. 边界条件处理
 * 3. 性能测试
 * 4. 错误恢复测试
 */

#include "../include/types.h"
#include "../include/printf.h"

// ========================================
// 性能测试
// ========================================

// 测试大量输出的性能
void test_performance(void)
{
    printf("=== 性能测试 ===\n");
    
    // 测试大量整数输出
    printf("测试1000个整数输出...\n");
    for (int i = 0; i < 1000; i++) {
        printf("%d ", i);
        if (i % 50 == 49) printf("\n");
    }
    printf("\n");
    
    // 测试大量字符串输出
    printf("测试100个字符串输出...\n");
    for (int i = 0; i < 100; i++) {
        printf("String %d ", i);
        if (i % 10 == 9) printf("\n");
    }
    printf("\n");
}

// ========================================
// 错误恢复测试
// ========================================

// 测试各种错误情况的处理
void test_error_recovery(void)
{
    printf("=== 错误恢复测试 ===\n");
    
    // 测试未知格式符
    printf("未知格式符测试: %z\n", 123);
    
    // 测试格式字符串不匹配
    printf("格式不匹配测试: %d %s\n", "hello", 123);
    
    // 测试空格式字符串
    printf("");
    
    // 测试只有%的格式字符串
    printf("%");
    
    printf("\n");
}

// ========================================
// 综合功能测试
// ========================================

// 测试所有功能的综合使用
void test_comprehensive(void)
{
    printf("=== 综合功能测试 ===\n");
    
    // 清屏
    clear_screen();
    
    // 输出标题
    printf_color(COLOR_CYAN, "=== RISC-V 最小操作系统功能演示 ===\n\n");
    
    // 输出系统信息
    printf("系统信息:\n");
    printf("  架构: RISC-V 64位\n");
    printf("  版本: 1.0.0\n");
    printf("  功能: printf, 清屏, 颜色, 光标控制\n\n");
    
    // 输出内存信息
    printf("内存布局:\n");
    printf("  内核起始: 0x%x\n", 0x80000000);
    printf("  UART地址: 0x%x\n", 0x10000000);
    printf("  栈大小: %d KB\n", 4);
    printf("\n");
    
    // 输出测试结果
    printf_color(COLOR_GREEN, "测试结果:\n");
    printf("  ✓ printf功能正常\n");
    printf("  ✓ 清屏功能正常\n");
    printf("  ✓ 颜色输出正常\n");
    printf("  ✓ 光标控制正常\n");
    printf("  ✓ sprintf功能正常\n");
    printf("\n");
    
    // 输出进度条演示
    printf("启动进度:\n");
    for (int i = 0; i <= 100; i += 10) {
        printf("进度: %d%% ", i);
        for (int j = 0; j < i / 10; j++) {
            printf("█");
        }
        for (int j = i / 10; j < 10; j++) {
            printf("░");
        }
        printf("\n");
    }
    printf("\n");
    
    // 输出完成信息
    printf_color(COLOR_YELLOW, "=== 所有功能测试完成 ===\n");
}

// ========================================
// 主测试函数
// ========================================

// 运行所有测试
void run_all_tests(void)
{
    printf_color(COLOR_GREEN, "开始运行测试套件...\n\n");
    
    // 基本功能测试
    test_printf_basic();
    test_printf_edge_cases();
    test_sprintf();
    
    // 高级功能测试
    test_clear_screen();
    test_color_output();
    test_cursor_control();
    
    // 性能和错误测试
    test_performance();
    test_error_recovery();
    
    // 综合测试
    test_comprehensive();
    
    printf_color(COLOR_GREEN, "测试套件运行完成！\n");
}
